/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upn.sigemfi.can.beans;

import edu.upn.sigemfi.can.bc.BancoDelegate;
import edu.upn.sigemfi.can.bc.CuentaDelegate;
import edu.upn.sigemfi.can.bc.MonedaDelegate;
import edu.upn.sigemfi.can.bc.TransaccionWebDelegate;
import edu.upn.sigemfi.can.be.Banco;
import edu.upn.sigemfi.can.be.TransaccionExternaWeb;
import edu.upn.sigemfi.can.be.TransaccionGiroWeb;
import edu.upn.sigemfi.can.be.TransaccionInternaWeb;
import edu.upn.sigemfi.can.be.TransaccionServicioWeb;
import edu.upn.sigemfi.can.be.TransaccionWeb;
import edu.upn.sigemfi.ope.be.Moneda;
import edu.upn.sigemfi.plt.be.Cuenta;
import java.util.Date;
import java.util.List;

/**
 *
 * @author Orlando ( U )
 */
public class TransaccionWebController extends AbstractController {

    private TransaccionWebDelegate delegado;
    private TransaccionWeb transaccionWeb;
    private TransaccionGiroWeb giroWeb;
    private String criterioGiro;
    private TransaccionInternaWeb internaWeb;
    private String criterioInterno;
    private TransaccionExternaWeb externaWeb;
    private String criterioExterno;
    private TransaccionServicioWeb servicioWeb;
    private String criterioServicio;
    private Cuenta cuentaSeleccionada;
    private Moneda monedaSeleccionada;
    private Banco bancoSeleccionado;



    private CuentaDelegate cuentaDelegado;
    private MonedaDelegate monedaDelegado;
    private BancoDelegate bancoDelegate;

    public Banco getBancoSeleccionado() {
        return bancoSeleccionado;
    }

    public void setBancoSeleccionado(Banco bancoSeleccionado) {
        this.bancoSeleccionado = bancoSeleccionado;
    }


     public Moneda getMonedaSeleccionada() {
        return monedaSeleccionada;
    }

    public void setMonedaSeleccionada(Moneda monedaSeleccionada) {
        this.monedaSeleccionada = monedaSeleccionada;
    }
    public Cuenta getCuentaSeleccionada() {
        return cuentaSeleccionada;
    }

    public void setCuentaSeleccionada(Cuenta cuentaSeleccionada) {
        this.cuentaSeleccionada = cuentaSeleccionada;
    }

    public TransaccionWebController() {
        delegado = new TransaccionWebDelegate();
        cuentaDelegado = new CuentaDelegate();
        monedaDelegado = new MonedaDelegate();
    }

    public String getCriterioExterno() {
        return criterioExterno;
    }

    public void setCriterioExterno(String criterioExterno) {
        this.criterioExterno = criterioExterno;
    }

    public TransaccionExternaWeb getExternaWeb() {
        return externaWeb;
    }

    public void setExternaWeb(TransaccionExternaWeb externaWeb) {
        this.externaWeb = externaWeb;
    }
    

    public String getCriterioServicio() {
        return criterioServicio;
    }

    public void setCriterioServicio(String criterioServicio) {
        this.criterioServicio = criterioServicio;
    }

    public String getCriterioGiro() {
        return criterioGiro;
    }

    public void setCriterioGiro(String criterioGiro) {
        this.criterioGiro = criterioGiro;
    }

    public String getCriterioInterno() {
        return criterioInterno;
    }

    public void setCriterioInterno(String criterioInterno) {
        this.criterioInterno = criterioInterno;
    }




    public TransaccionGiroWeb getGiroWeb() {
        return giroWeb;
    }

    public void setGiroWeb(TransaccionGiroWeb giroWeb) {
        this.giroWeb = giroWeb;
    }

    public TransaccionInternaWeb getInternaWeb() {
        return internaWeb;
    }

    public void setInternaWeb(TransaccionInternaWeb internaWeb) {
        this.internaWeb = internaWeb;
    }

    public TransaccionServicioWeb getServicioWeb() {
        return servicioWeb;
    }

    public void setServicioWeb(TransaccionServicioWeb servicioWeb) {
        this.servicioWeb = servicioWeb;
    }




    // Giro Web
    public List<TransaccionGiroWeb> getGirosWebs() throws Exception{
        try{
            if(criterioGiro.isEmpty() || criterioGiro.trim().equals(""))
            {
                return delegado.listarGiroWeb();
            }
            else
            {
                return delegado.listarGiroWebPorDestinatario(criterioGiro);
            }
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return null;
    }

    public String nuevoGiroWeb() {
        giroWeb = new TransaccionGiroWeb();
        return "nuevo";
    }

    public String registrarGiroWeb() {
        try {

            giroWeb.setFidPltCuenta(cuentaSeleccionada);
            giroWeb.setFidOpeMoneda(monedaSeleccionada);

            giroWeb.setFechaTransaccionWeb(new Date());

            delegado.crearGiroWeb(giroWeb);
            
            giroWeb.setFidCanTransaccionWeb(delegado.buscarGiroWeb(giroWeb.getIdTransaccionWeb()));
            cuentaSeleccionada.setMontoActual(cuentaSeleccionada.getMontoActual() - giroWeb.getMontoTransaccionWeb().doubleValue());

            delegado.editarGiroWeb(giroWeb);

            cuentaDelegado.editar(cuentaSeleccionada);

           info("El Giro de Dinero se realizó de forma satisfactoria");


        } catch (Exception e) {
            error(e.getMessage());
        }
        return "confirmar";
    }

    //Transaccion Interna Web

    public String nuevoTransaccionInterna() {
        internaWeb = new TransaccionInternaWeb();
        return "nuevo";
    }

    public String registrarTransaccionInterna() {
      try {

            internaWeb.setFidPltCuenta(cuentaSeleccionada);
            internaWeb.setFidOpeMoneda(monedaSeleccionada);


            internaWeb.setFechaTransaccionWeb(new Date());

            delegado.crearTransaccionInterna(internaWeb);

            externaWeb.setFidCanTransaccionWeb(delegado.buscarInternaWeb(internaWeb.getIdTransaccionWeb()));
            cuentaSeleccionada.setMontoActual(cuentaSeleccionada.getMontoActual() - internaWeb.getMontoTransaccionWeb().doubleValue());

            delegado.editarInternaWeb(internaWeb);

            cuentaDelegado.editar(cuentaSeleccionada);

           info("La Transferencia entre tus Cuentas se realizó de forma satisfactoria");


        } catch (Exception e) {
            error(e.getMessage());
        }
        return "volver";
    }
    //Transaccion Externa Web

    public String nuevoTransaccionExterna(){
        externaWeb = new TransaccionExternaWeb();
        return "nuevo";
    }
    public String registrarTransaccionExterna(){
        try {

            externaWeb.setFidPltCuenta(cuentaSeleccionada);
            externaWeb.setFidOpeMoneda(monedaSeleccionada);
            externaWeb.setFidCanBanco(bancoSeleccionado);

            externaWeb.setFechaTransaccionWeb(new Date());

            delegado.crearTransaccionExterna(externaWeb);

            externaWeb.setFidCanTransaccionWeb(delegado.buscarExternaWeb(externaWeb.getIdTransaccionWeb()));
            cuentaSeleccionada.setMontoActual(cuentaSeleccionada.getMontoActual() - externaWeb.getMontoTransaccionWeb().doubleValue());

            delegado.editarExternaWeb(externaWeb);

            cuentaDelegado.editar(cuentaSeleccionada);

           info("La Transferencia de Dinero a un Tercero se realizó de forma satisfactoria");


        } catch (Exception e) {
            error(e.getMessage());
        }
        return "volver";
    }
    //Transaccion Servicio Web
    public String nuevoServicio(){
        servicioWeb = new TransaccionServicioWeb();
        return "nuevo";
    }

    public String registrarServicio(){
        try {
            delegado.crearTransaccionServicio(servicioWeb);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

    public List<TransaccionWeb> getTransaccionesWeb() {
        try {
            return delegado.listar();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public TransaccionWeb getTransaccionWeb() {
        return transaccionWeb;
    }

    public void setTransaccionWeb(TransaccionWeb transaccionWeb) {
        this.transaccionWeb = transaccionWeb;
    }
             
//    public TransaccionWeb getTransaccionWeb() {
//        return transaccionWeb;
//    }
//
//    public void setTransaccionWeb(TransaccionWeb transaccionWeb) {
//        this.transaccionWeb = transaccionWeb;
//    }
}
